#ifndef USERREPOSITORY_H
#define USERREPOSITORY_H


#include <QtSql/QSqlDatabase>
#include "UserRepository_global.h"
#include <QString>
#include <QList>
#include <QDebug>




namespace UserManagementSystem {

//患者信息类
class USERREPOSITORY_EXPORT PatientData{
public:
    //记录患者的id信息
    QString  patient_id="";

    QString first_name,lastname,name;//姓,名字
    QString age,create_time,modify_time;//患者年龄、创建时间、修改时间
    int gender ;//性别
    QString birthday;//生日
    QString phone,email,address;//电话,邮箱、地址
    QString annotation;//备注
    int is_valid; //患者是否有效
    QString others;
    QString mac_id,create_by;

public:
    inline void PrintPatientData(){
        qDebug()<<name<<" "<<first_name<<" " <<age<<" "<<gender<<" "<<birthday<<" "<<phone<<" "<<email<<" "<<address<<" "<<annotation;

    }
};

//已经选择好的case的信息
class USERREPOSITORY_EXPORT CaseData{
public:
    //病例的序号，是否有效，是否有3d数据，是否存储在本地，工作控件清空状态，
    int serial_number,in_valid,has_3d,is_store,work_space_cleaned_status,pre_scan,age_type;
    QString id,clinic_id,clinic_name,patient_id,doctor_id,operator_id;

    QString case_type,note,save_path,create_time,update_time,device,language;

    //工作空间路径，文件存储路径，患者名，医生名字，操作者名字，病例名称
    QString work_space_path,folder_name,patient_name,doctor_name,operator_name,case_name;

    //修复名称，材料名称，植体名称，正畸名称，牙号类型，软件版本
    QString repair_name,materials_name,plant_name,is_scan_name,orthodontics_name,tooth_numder_type,software_version;

    //扫描时间，扫描文件夹名称，创建者，
    QString scan_time,scan_folder_name,create_by,is_sync,due_date,status,machine_type,mac_id;

};

class USERREPOSITORY_EXPORT Doctor{
public:
    int serial_number,is_delete;
    QString id,name,create_time,update_time,is_sync,last_use_time,mac_id;

};

class USERREPOSITORY_EXPORT SettingConfig{
public:
    QString language,tooth_number_type,check_case_type;

};

class USERREPOSITORY_EXPORT UserRepository
{

public:
    UserRepository(const QString& db_path);
    ~UserRepository();

    //@brief设置数据库地址
    void SetDBPath(const QString& db_path);

    ///@brief 获得患者数据
    QList<PatientData> GetPatientData();

    ///@brief 获得病例数据
    QList<CaseData> GetCaseDate();

private:
    ///@brief 从数据库加载患者数据
    void LoadPatientDataFromDB();

    ///@brief 从数据库加载病例数据
    void LoadCaseDataFromDB();

    ///@brief 从数据库加载系统配置信息
    void LoadSettingConfigFromDB();



private:
    ///@brief 存储从数据库督导的患者信息
    QList<PatientData> m_patientData;

    ///@brief 存储从数据库得到的病例信息
    QList<CaseData> m_caseDataLists;

    QSqlDatabase m_db;

};

}

#endif // USERREPOSITORY_H
